package beans;

import java.lang.ProcessBuilder.Redirect;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import util.Fachada;
import basicas.Artista;
import basicas.CategoriaEvento;
import basicas.Evento;
import basicas.Ingresso;
import basicas.LocalidadeEvento;

@ManagedBean
@SessionScoped
public class IngressoBean {

	private Ingresso ingresso = new Ingresso();
	private Evento evento = new Evento();
	private List<Ingresso> listaDeIngressos = new ArrayList<Ingresso>();
	private Ingresso[] selectedIngressos;
	private Artista artista = new Artista();
	private LocalidadeEvento localidadePesquisada = new LocalidadeEvento();
	private CategoriaEvento categoria = new CategoriaEvento();
	private Date data;

	public Ingresso[] getSelectedIngressos() {
		return selectedIngressos;
	}

	public List<LocalidadeEvento> getLocalidades() {
		return Fachada.obterInstancia().listarLocalidadeEvento();
	}

	public void setSelectedIngressos(Ingresso[] selectedIngressos) {
		this.selectedIngressos = selectedIngressos;
	}

	public Evento getEvento() {
		return evento;
	}

	public List<Evento> getAllEvento() {
		return Fachada.obterInstancia().listarEvento();
	}

	public List<CategoriaEvento> getAllCategoriaEvento() {

		return Fachada.obterInstancia().listarCategoriaEvento();
	}

	public void setEvento(Evento evento) {
		this.evento = evento;
	}

	public List<Ingresso> getListaDeIngressos() {
		return listaDeIngressos;
	}

	public void setListaDeIngressos(List<Ingresso> listaDeIngressos) {
		this.listaDeIngressos = listaDeIngressos;
	}

	public void adicionar() {
		try {
			Fachada.obterInstancia().salvar(ingresso);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public String limpar () {

		if(ingresso != null){
		ingresso.setEvento(null);
		}
	    data = null;
	    if(artista != null){
	   	  artista.setNome("");
	    }
	    if (localidadePesquisada != null) {
	    	localidadePesquisada.setid(0);
	    }
	    if (categoria != null){
	    	 categoria.setid(0);
	    }
	    return "Ingressos.xhtml?faces-redirect=true";
	}
	public Ingresso getIngresso() {
		return ingresso;
	}

	public void setIngresso(Ingresso ingresso) {
		this.ingresso = ingresso;
	}

	public List<Ingresso> getAllIngresso() {
		return Fachada.obterInstancia().listarIngresso();
	}

	public Integer getAllIngressoSize() {
		return Fachada.obterInstancia().listarIngresso().size();
	}

	public String paginaPesquisaIngressos() {
		return "pesquisaIngressos.xhtml?faces-redirect=true";
	}

	public String voltarPaginaIngressos() {

		if (ingresso == null) {
			ingresso = new Ingresso();
		}

		return "Ingressos.xhtml?faces-redirect=true";
	}

	public List<Evento> getAllEventos() {
		return Fachada.obterInstancia().listarEvento();
	}

	public List<Ingresso> getPesquisaIngressosComFiltro() {

		Ingresso ing = new Ingresso();
		Evento eventoInterno = new Evento();
		ing.setPedido(null);

		if (evento.getId() != 0) {
//			eventoInterno = Fachada.obterInstancia().pesquisarPorChaveEvento(
//					evento.getid());
			ing.setEvento(evento);

		} else {
			ing.setEvento(eventoInterno);

			if (localidadePesquisada.getid() != 0) {
				ing.getEvento().setLocalidade(localidadePesquisada);
			}

			if (categoria.getid() != 0) {
				ing.getEvento().setCategoria(categoria);
			}

			if (artista.getNome() != "") {
				List<Artista> listaArtista = new ArrayList<Artista>();
				listaArtista.add(artista);
				ing.getEvento().setArtista(listaArtista);
			}

			if (data != null) {
				ing.getEvento().setDataEvento(data);
			}
		}
		System.out.println(ing);
		List<Ingresso> listIngresso = Fachada.obterInstancia().consultarIngressoPorEvento(ing.getEvento());
		List<Ingresso> listIngressoTratada = new ArrayList<Ingresso>();
		
		for (Ingresso ingresso : listIngresso) {
			if (ingresso.getPedido() == null) {
				listIngressoTratada.add(ingresso);
			}
		}
		
		return listIngressoTratada;
	}
	
	public String enviarAoCarrinho(){
		for (Ingresso ing : selectedIngressos) {
			ing.setIrAoCarrinho(true);
			Fachada.obterInstancia().salvar(ing);
		}
		
		return "CarrinhoDeCompras.xhtml?faces-redirect=true";
	}
	
	
	public String refresh() {

		listaDeIngressos = getPesquisaIngressosComFiltro();
		System.out.println("ListaDeIngresso: " + listaDeIngressos);
		return "Ingressos.xhtml?faces-redirect=true";
	}

	public Artista getArtista() {
		return artista;
	}

	public void setArtista(Artista artista) {
		this.artista = artista;
	}

	public CategoriaEvento getCategoria() {
		return categoria;
	}

	public void setCategoria(CategoriaEvento categoria) {
		this.categoria = categoria;
	}

	public LocalidadeEvento getLocalidadePesquisada() {
		return localidadePesquisada;
	}

	public void setLocalidadePesquisada(LocalidadeEvento localidadePesquisada) {
		this.localidadePesquisada = localidadePesquisada;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

}
